package contable.aplicacion.contabilidad.inventario;

import contable.dominio.Cardex;
import contable.dominio.Cuenta;
import contable.dominio.Inventario;
import java.util.Date;

/**
 *
 * @author jaime
 */
public abstract class Ventas extends Inventarios {

    protected abstract void registrarVenta(String codInv, double costo, double valor);

    protected abstract void ivaRetenido(Cuenta cuenta, double valor);

    public void promocion(double valor) {
        // TODO descuento por promociones
        // Cuentas afectadas                  Debe    Haber
        // 411-020-000-000 PROMOCIONES         *
        // 111-000-000-000 CAJA                        *
        // 125-001-000-000 CUENTAS POR COBRAR          *
    }

    public void descuentos(double valor) {
        // TODO descuentos sobre ventas
        // Cuentas afectadas                       Debe    Haber
        // 422-000-000-000 DESCUENTOS SOBRE VENTAS  *
        // 111-000-000-000 CAJA                             *
        // 125-001-000-000 CUENTAS POR COBRAR               *
    }

    /**
     * Registrar la venta de mercaderías
     * <table border="1">
     *   <tr>
     *     <th>Código</th>
     *     <th>Nombre</th>
     *     <th>Debe</th>
     *     <th>Haber</th>
     *   </tr>
     *   <tr>
     *     <td>423-001-000-000</td>
     *     <td>MERCADERIAS</td>
     *     <td></td>
     *     <td>valor</td>
     *   </tr>
     * </table>
     * @param valor El valor con que se afectará las cuentas
     */
    public void mercaderias(double costo, double valor) {
        registrarVenta("423-001-000-000", costo, valor);
    }

    @Override
    public void papelFotografico(int cantidad, double precio) {
    }

    @Override
    public void tinta(int cantidad, double precio) {
    }

    @Override
    public void empaque(int cantidad, double precio) {
    }

    @Override
    public void fotografia(int cantidad, double precio) {
        // TODO Hacer la venta de fotografias
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void camara(int cantidad, double precio) {
        producto = new Inventario();
        fsql.rollback(producto, 4);
        cdx = new Cardex(producto);
        cdx.esCompra(false);
        cdx.setCantidad(cantidad);
        cdx.setFecha(new Date());
        cdx.setPeriodo(periodo);
        mercaderias((double) cantidad * producto.getCosto(), (double) cantidad * precio);
        fsql.commit(cdx);
    }

    @Override
    public void memoriaUSB2(int cantidad, double precio) {
        producto = new Inventario();
        fsql.rollback(producto, 5);
        cdx = new Cardex(producto);
        cdx.esCompra(false);
        cdx.setCantidad(cantidad);
        cdx.setFecha(new Date());
        cdx.setPeriodo(periodo);
        mercaderias((double) cantidad * producto.getCosto(), (double) cantidad * precio);
        fsql.commit(cdx);
    }

    @Override
    public void memoriaUSB4(int cantidad, double precio) {
        producto = new Inventario();
        fsql.rollback(producto, 6);
        cdx = new Cardex(producto);
        cdx.esCompra(false);
        cdx.setCantidad(cantidad);
        cdx.setFecha(new Date());
        cdx.setPeriodo(periodo);
        mercaderias((double) cantidad * producto.getCosto(), (double) cantidad * precio);
        fsql.commit(cdx);
    }

    @Override
    public void memoriaUSB8(int cantidad, double precio) {
        producto = new Inventario();
        fsql.rollback(producto, 7);
        cdx = new Cardex(producto);
        cdx.esCompra(false);
        cdx.setCantidad(cantidad);
        cdx.setFecha(new Date());
        cdx.setPeriodo(periodo);
        mercaderias((double) cantidad * producto.getCosto(), (double) cantidad * precio);
        fsql.commit(cdx);
    }

    @Override
    public void memoriaUSB16(int cantidad, double precio) {
        producto = new Inventario();
        fsql.rollback(producto, 8);
        cdx = new Cardex(producto);
        cdx.esCompra(false);
        cdx.setCantidad(cantidad);
        cdx.setFecha(new Date());
        cdx.setPeriodo(periodo);
        mercaderias((double) cantidad * producto.getCosto(), (double) cantidad * precio);
        fsql.commit(cdx);
    }

    @Override
    public void estucheCamara(int cantidad, double precio) {
        producto = new Inventario();
        fsql.rollback(producto, 9);
        cdx = new Cardex(producto);
        cdx.esCompra(false);
        cdx.setCantidad(cantidad);
        cdx.setFecha(new Date());
        cdx.setPeriodo(periodo);
        mercaderias((double) cantidad * producto.getCosto(), (double) cantidad * precio);
        fsql.commit(cdx);
    }

    @Override
    public void marcoFotografia(int cantidad, double precio) {
        producto = new Inventario();
        fsql.rollback(producto, 10);
        cdx = new Cardex(producto);
        cdx.esCompra(false);
        cdx.setCantidad(cantidad);
        cdx.setFecha(new Date());
        cdx.setPeriodo(periodo);
        mercaderias((double) cantidad * producto.getCosto(), (double) cantidad * precio);
        fsql.commit(cdx);
    }
}
